home *** CD-ROM | disk | FTP | other *** search
- TITL 'SELF TEST CODE FOR TMS320C10'
- IDT 'SELF'
- ************************************************************
- * *
- * THIS PROGRAM EXECUTES AN INTERNAL SELFTEST OF THE *
- * TMS32010 MICROCOMPUTER. THE TEST IS WRITTEN TO *
- * EXECUTE IN ON-CHIP ROM AND UPON COMPLETION EXIT *
- * TO OFF-CHIP PROGRAM MEMORY AT >600. IF AN ERROR *
- * OCCURS THE ERROR CODE WILL RESIDE IN DATA MEMORY *
- * WORD ZERO. IF NO ERRORS OCCUR THEN DATA MEMORY *
- * WILL BE INITIALIZED TO ZERO *
- * *
- * PROGRAM WRITTEN BY PETER EHLIG *
- * 04/12/85 *
- * REVISION 1.1 *
- * *
- ************************************************************
- DEF START
- REF ENDCD
- RORG 0
- * *
- * RESET AND INTERRUPT VECTORS *
- * *
- BEGIN B START RESET SOFT VECTOR
- B INTRPT INTERRUPT SOFT VECTOR
- * *
- * REQUIRED DATA VALUES FOR TEST PROGRAMS *
- * *
- RAMPT1 DATA >FFFF RAM TEST PATTERN 1
- RAMPT2 DATA >AAAA RAM TEST PATTERN 2
- RAMPT3 DATA >5555 RAM TEST PATTERN 3
- RAMPT4 DATA 0 RAM TEST PATTERN 4
- CODL DATA ENDCD-1 STORE ADDRESS OF END OF CODE
- LRDADD DATA >EC71 LONGITUDINAL REDUNDANCY ADDER
- CSVAL DATA 0 CHECKSUM ADDER
- MULTBL EQU $
- DATA >6F11 FOURTH T VALUE
- DATA >22F THIRD T VALUE
- DATA >114E SECOND T VALUE
- DATA >2000 FIRST T VALUE
- DATA >F058 LOW ANSWER
- DATA >148 HIGH ANSWER
- DATA >21 FOURTH D VALUE
- DATA >3FE1 THIRD D VALUE
- DATA >112 SECOND D VALUE
- DATA >640 FIRST D VALUE
- * *
- * PROGRAM INITIALIZATION DP = 0 AND DISABLE INTERRUPTS *
- * *
- START EQU $ START INITIALIZATION ROUTINE
- LDPK 0 START IN ZERO DATA PAGE
- DINT DISABLE EXTERNAL INTERRUPTS
- PAGE
- * *
- * TEST AUXILIARY REGISTERS *
- * *
- AUXTST EQU $ AUXILIARY REGISTER COUNTER TEST
- LARP 0 POINT TO AUXILIARY REGISTER 0
- LARK 0,>7F LOAD AUX0 WITH TEST PATTERN
- MAR *+ INCREMENT PATTERN
- SAR 0,1 SAVE VALUE
- LACK >80 SET COMPARE MASK
- XOR 1 COMPARE BITS
- BZ AUX00 IF = TO MASK THEN CONTINUE TEST
- LACK 4 ELSE, LOAD IN ERROR CODE 4
- B ERROR EXIT TO ERROR EXIT
- AUX00 EQU $
- MAR *- DECREMENT PATTERN
- SAR 0,1 SAVE VALUE
- LACK >7F SET COMPARE MASK
- XOR 1 COMPARE BITS
- BZ AUX10 IF = TO MASK THEN CONTINUE TEST
- LACK 5 ELSE, LOAD IN ERROR CODE 5
- B ERROR AND EXIT TO ERROR
- AUX10 EQU $
- LARP 1 POINT TO AUXILIARY REGISTER 1
- LARK 1,>7F LOAD AUX1 WITH TEST PATTERN
- MAR *+ INCREMENT PATTERN
- SAR 1,1 SAVE VALUE
- LACK >80 SET COMPARE MASK
- XOR 1 COMPARE BITS
- BZ AUX11 IF = TO MASK THEN CONTINUE TEST
- LACK 6 ELSE, LOAD IN ERROR CODE 6
- B ERROR EXIT TO ERROR EXIT
- AUX11 EQU $
- MAR *- DECREMENT PATTERN
- SAR 1,1 SAVE VALUE
- LACK >7F SET COMPARE MASK
- XOR 1 COMPARE BITS
- BZ RAM IF = TO MASK THEN CONTINUE TEST
- LACK 7 ELSE, LOAD IN ERROR CODE 7
- B ERROR AND EXIT TO ERROR
- PAGE
- * *
- * DATA RAM TEST *
- * *
- RAM EQU $
- LACK RAMPT1 GET RAM PATTERN 1 ADDRESS
- SACL 0 SAVE PATTERN ADDRESS IN REG0
- CALL RAMLP0 CALL RAM TEST
- LACK RAMPT2 GET RAM PATTERN 2 ADDRESS
- SACL 0 SAVE PATTERN ADDRESS IN REG0
- CALL RAMLP0 CALL RAM TEST
- LACK RAMPT3 GET RAM PATTERN 3 ADDRESS
- SACL 0 SAVE PATTERN ADDRESS IN REG0
- CALL RAMLP0 CALL RAM TEST
- LACK RAMPT4 GET RAM PATTERN 4 ADDRESS
- SACL 0 SAVE PATTERN ADDRESS IN REG0
- CALL RAMLP0 CALL RAM TEST
- B ROM NO ERRORS, BRANCH TO ROM TEST
- RAMLP0 LARK 1,>8F POINT TO LAST WORD IN DATA RAM
- ZALS 0 GET PATTERN ADDRESS
- TBLR 0 TRANSFER RAM PATTERN ONE TO DMA0
- ZALS 0 LOAD ACC WITH RAM PATTERN
- RAMLP1 SACL * STORE PATTERN IN DATA RAM
- BANZ RAMLP1 IF AUX0 <> 0 THEN CONTINUE
- LARK 1,>8F POINT TO LAST WORD IN DATA RAM
- RAMLP2 ZALS 0 LOAD IN COMPARE MASK
- XOR * COMPARE BITS
- BNZ RAMERR IF <> 0 GOTO RAM ERROR HANDLER
- BANZ RAMLP2 ELSE CONTINUE TEST
- RET RETURN FROM CALL
- RAMERR EQU $
- LACK >FF LOAD ACC WITH LARGEST IMMEDIATE
- MAR *+ GET ADDRESS OF FAILED RAM
- SAR 1,0 STORE THE ADDRESS
- ADD 0 INTO THE ACCUMULATOR
- B ERROR EXIT TO ERROR HANDLER
- PAGE
- * *
- * PROGRAM ROM TEST (LONGITUDINAL REDUNDANCY) *
- * *
- ROM EQU $
- LACK 1 GET DECREMENT VALUE
- SACL 3 AND STORE IT FOR LATTER
- LACK 8 GET ADDRESS OF CODE END
- TBLR 0 AND LOAD IT IN DMA0
- ZALS 0 AND ALSO IN THE ACCUMULATOR
- ROMLP1 TBLR 1 READ PROGRAM CODE WORD
- ZALS 2 LOAD IN CURRENT LRC VALUE
- XOR 1 XOR IT WITH NEW PROGRAM WORD
- SACL 2 SAVE THE ADJUSTED LRC VALUE
- LAC 0 LOAD IN CURRENT PROGRAM ADDRESS
- SUB 3 DECREMENT IT
- SACL 0 STORE NEW COUNT
- BGEZ ROMLP1 IF NOT FINISHED CONTINUE
- ZALS 2 GET CALCULATED LRC
- BZ ALU IF = ZERO THEN GO TO ALU TEST
- LACK >C0 LOAD ACC WITH ERROR CODE
- SACL 0 STORE VALUE FOR SHIFT
- LAC 0,4 SET ERROR VALUE TO >C00
- B ERROR BRANCH TO ERROR EXIT
- PAGE
- * *
- * ARITHMETIC LOGIC UNIT TEST *
- * *
- ALU EQU $
- LACK 1 GET INCREMENT VALUE
- SACL 8 STORE IT IN REG8
- LACK 4 POINT ACC TO PATTERNS TABLE
- TBLR 4 PUT TABLE VALUE IN REG4
- ADD 8 INCREMENT TABLE ADDRESS
- TBLR 5 PUT TABLE VALUE IN REG5
- ADD 8 INCREMENT TABLE ADDRESS
- TBLR 6 PUT TABLE VALUE IN REG6
- ADD 8 INCREMENT TABLE ADDRESS
- TBLR 7 PUT TABLE VALUE IN REG7
- LACK >10 SET ERROR CODE VALUE
- SACL 2 STORE CODE IN REG 2
- ALU1 ZAC CLEAR OUT ACCUMULATOR
- ADDS 5 ADD IN >AAAA PATTERN
- AND 5 AND WITH >AAAA PATTERN
- OR 6 OR WITH >5555 PATTERN
- SUBS 4 SUBTRACT -1 FROM PATTERN
- BZ ALU2 IF ACC CLEARED GO TO NEXT TEST
- LACK 1 IF NOT THEN SET TEST 1 CODE
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- ALU2 ZALH 5 ADD HIGH THE >AAAA PATTERN
- ADDH 6 SUBTRACT HIGH THE >5555 PATTERN
- SACH 0 SAVE THE VALUE
- ZALH 0 RESTORE THE VALUE
- ABS TAKE ABSOLUTE VALUE
- SUBH 8 SUBTRACT HIGH >10000
- BZ ALU3 IF ACC CLEARED GO TO NEXT TEST
- LACK 2 IF NOT THEN SET TEST CODE 2
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- ALU3 LAC 4,12 LOAD ACC WITH >FFFFF000 PATTERN
- ADD 8,12 ADD >00001000 TO IT
- BZ ALU4 IF ACC CLEARED GO TO NEXT TEST
- LACK 3 IF NOT THEN SET TEST 3 CODE
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- ALU4 ADD 4 LOAD ACC WITH >FFFFFFFF PATTERN
- ABS TAKE ABSOLUTE VALUE
- SUB 8 SUBTRACT >00000001
- BZ ALU5 IF ACC CLEARED GO TO NEXT TEST
- LACK 4 IF NOT THEN SET TEST 4 CODE
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- ALU5 LACK >40 GET DIVISOR = 64
- SACL 0 SAVE IN REG0
- LACK >FF GET DIVIDEND = 255
- SUBC 0 FIRST STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 SECOND STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 THIRD STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 FOURTH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 FIFTH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 SIXTH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 SEVENTH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 8TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 9TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 10TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 11TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 12TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 13TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 14TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 15TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SUBC 0 16TH STAGE OF DIVIDE
- NOP REQUIRED NOP
- SACH 1 SAVE REMAINDER
- SACL 2 SAVE QUOTIENT
- LACK 3 GET QUOTIENT COMPARISON MASK
- XOR 2 COMPARE WITH CALCULATED ANSWER
- BZ ALU6 IF ACC CLEARED GO TO NEXT TEST
- LACK 5 IF NOT THEN SET TEST 5 CODE
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- ALU6 LACK >3F GET REMAINDER COMPARISON MASK
- XOR 1 COMPARE WITH ANSWER
- BZ STATUS IF ACC CLEARED GO TO NEXT TEST
- LACK 6 IF NOT THEN SET TEST 6 CODE
- ADD 2,8 ADD IN ERROR CODE
- B ERROR EXIT TO ERROR ROUTINE
- PAGE
- * *
- * STATUS REGISTER AND CONDITIONAL BRANCH TEST *
- * *
- STATUS EQU $
- LAC 4 GET >FFFF PATTERN FOR TEST
- BGZ BERR IF > 0 THEN ERROR
- BZ BERR IF = 0 THEN ERROR
- BV BERR IF OVERFLOW THEN ERROR
- BLZ ST2 IF < 0 THEN TEST 1 PASSES
- B BERR ELSE ERROR
- ST2 BLEZ ST3 IF <= 0 THEN TEST 2 PASSES
- B BERR ELSE ERROR
- ST3 ZAC CLEAR ACC
- BGZ BERR IF > 0 THEN ERROR
- BLZ BERR IF < 0 THEN ERROR
- BNZ BERR IF <> 0 THEN ERROR
- BV BERR IF OVERFLOW THEN ERROR
- BZ ST4 IF = 0 THEN TEST 3 PASSES
- B BERR ELSE ERROR
- ST4 BLEZ ST5 IF <= 0 THEN TEST 4 PASSES
- B BERR ELSE ERROR
- ST5 BGEZ ST6 IF >= 0 THEN TEST 5 PASSES
- B BERR ELSE ERROR
- ST6 LAC 6 LOAD IN >5555 PATTERN
- BLEZ BERR IF <= 0 THEN ERROR
- BLZ BERR IF < 0 THEN ERROR
- BZ BERR IF = 0 THEN ERROR
- BV BERR IF OVERFLOW THEN ERROR
- BGZ ST7 IF > 0 THEN TEST 6 PASSES
- B BERR ELSE ERROR
- ST7 BGEZ ST8 IF >= 0 THEN TEST 7 PASSES
- B BERR ELSE ERROR
- ST8 BNZ ST9 IF <> 0 THEN TEST 8 PASSES
- B BERR ELSE ERROR
- ST9 ROVM TURN OFF OVERFLOW SATURATION
- LAC 4 LOAD HIGH ACC WITH >FFFFFFFF
- ADDH 6 ADD >55550000
- BV BERR IF OVERFLOW THEN ERROR
- ADDH 6 ADD >55550000 AGAIN
- SST 0 STORE STATUS FOR TEST 11
- BV ST10 IF OVERFLOW THEN TEST 9 PASSED
- B BERR ELSE ERROR
- ST10 BV BERR IF STILL OVERFLOW THEN ERROR
- ADDH 5 ADD >AAAA0000
- BV ST11 IF UNDERFLOW THEN TEST 10 PASSED
- B BERR ELSE ERROR
- ST11 BV BERR IF STILL UNDERFLOW THEN ERROR
- LDP 1 GO TO DATA PAGE 1
- LST 0 GET SAVED STATUS
- BV ST12 IF OVERFLOW THEN TEST 11 PASSED
- B BERR ELSE ERROR
- ST12 SOVM SET ACCUMULATOR TO OVERFLOW MODE
- ZALH 6 LOAD ACC WITH >55550000 PATTERN
- ADDH 6 ADD >55550000 TO ACC
- BV ST13 IF OVERFLOW THEN PASS TEST 12
- B BERR ELSE ERROR
- ST13 SACH 1 STORE THE HIGH ACCUMULATOR
- SACL 2 STORE LOW ACCUMULATOR
- ZALS 4 GET COMPARE PATTERN MASK
- XOR 2 AND CHECK ANSWER
- BNZ BERR IF NOT >FFFF THEN ERROR
- ZALS 4 GET COMPARE PATTERN MASK
- SUB 8,15 MODIFY TO >7FFF
- XOR 1 AND CHECK ANSWER
- BNZ BERR IF NOT >7FFF THEN ERROR
- ZALH 5 LOAD ACC WITH >55550000 PATTERN
- ADDH 5 ADD >55550000 TO ACC
- BV ST14 IF OVERFLOW THEN PASS TEST 12
- B BERR ELSE ERROR
- ST14 SACH 1 STORE THE HIGH ACCUMULATOR
- SACL 2 STORE LOW ACCUMULATOR
- ZAC GET COMPARE PATTERN MASK
- XOR 2 AND CHECK ANSWER
- BNZ BERR IF NOT >0000 THEN ERROR
- LAC 8,15 GET COMPARE PATTERN MASK
- XOR 1 AND CHECK ANSWER
- BZ SHIFT IF NOT >8000 THEN ERROR
- ROVM TURN OFF OVERFLOW SATURATION MODE
- BERR EQU $
- LACK >20 GET ERROR CODE
- SACL 0 STORE FOR SHIFT
- LAC 0,8 SET ERROR CODE TO >2000
- B ERROR EXIT TO ERROR HANDLER
- PAGE
- * *
- * SHIFTER TESTS *
- * *
- SHIFT ROVM TURN OFF OVERFLOW SATURATION MODE
- LAC 8,15 LOAD ACC WITH >00008000
- SACH 0,1 SHIFT ACC ONE BIT AND MOVE
- ZALS 0 HIGH ACC TO LOW ACC
- XOR 8 COMPARE IT TO MASK
- BNZ SFTERR IF <> THEN ERROR
- LAC 8,12 LOAD ACC WITH >00001000
- SACH 0,4 SHIFT ACC 4 BITS AND MOVE
- ZALS 0 HIGH ACC TO LOW ACC
- XOR 8 COMPARE IT TO MASK
- BZ MULT IF EQUAL CONTINUE TEST
- SFTERR LACK >30 GET ERROR CODE VALUE
- SACL 0 AND SHIFT IT TO
- LAC 0,8 BE >3000
- B ERROR THEN BRANCH TO ERROR
- PAGE
- * *
- * MULTIPLIER HARDWARE TEST *
- * *
- MULT EQU $
- LARK 0,17 SET UP FOR T TABLE READ
- LARP 0 RUN FROM AUX 0
- LACK MULTBL POINT TO MULTIPLY TABLE
- TBLR *+ GET FIRST MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET SECOND MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET THIRD MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *,1 GET FOURTH MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- LARK 1,35 SET UP FOR D TABLE READ
- TBLR *+ GET LOW ACC ANSWER
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET HIGH ACC ANSWER
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET FIRST MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET SECOND MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *+ GET THIRD MULTIPLICAND
- ADD 8 INCREMENT TABLE POINTER
- TBLR *,0 GET FOURTH MULTIPLICAND
- LT *-,1 MULTIPY FIRST T VALUE
- MPY *-,0 TIMES FIRST D VALUE
- PAC PACK PRODUCT TO ACC
- LT *-,1 MULTIPLY SECOND T VALUE
- MPY *-,0 TIMES SECOND D VALUE
- LTA *-,1 ACC PRODUCT AND MULTIPLY 3RD
- MPY *-,0 T VALUE TIMES THIRD D VALUE
- LTD *,1 ACC PRODUCT AND MULTIPLY 4TH
- MPY *- T VALUE TIMES 4TH D VALUE
- APAC ACCUMULATE THE PRODUCT
- MPYK >64 MULTIPLY 64 TIMES 4TH T VALUE
- SPAC SUBTRACT PRODUCT FROM ACC
- SACH 0 SAVE THE HIGH ACC
- SACL 1 SAVE THE LOW ACC
- ZALS *- GET HIGH ANSWER MASK
- XOR 0 COMPARE IT WITH HIGH ANSWER
- BNZ MLTERR IF <> 0 THEN ERROR
- ZALS *,0 GET LOW ANSWER MASK
- XOR 1 COMPARE IT WITH LOW ANSWER
- BNZ MLTERR IF <> 0 THEN ERROR
- ZALS *+ GET ORIGINAL DATA AND
- XOR * COMPARE IT TO DMOV DATA
- BZ OTHER IF = THEN TEST PASSES
- MLTERR LACK >40 SET VALUE FOR ERROR CODE
- SACL 2 SHIFT THE ERROR VALUE 8
- LAC 2,8 BITS TO GET ERROR CODE >4000
- B ERROR AND EXIT TO ERROR ROUTINE
- PAGE
- * *
- * THE REST OF INSTRUCTIONS TEST *
- * *
- OTHER EQU $
- LDP 8 SET DP TO ONE
- SST 0 STORE STATUS
- ZALS 0 GET STORED STATUS
- LDPK 0 RESET DP TO ZERO
- AND 8 COMPARE DP BIT
- BZ OTHERR IF = 0 THEN ERROR
- LAR 0,7 SET AR0 TO 0
- ZALS 6 GET THE DATA PATTERN >5555
- SACL 0 AND PUT IT IN REG 0
- DMOV * MOVE VALUE FROM REG 0 TO 1
- ZALS *+ COMPARE ACC WITH ORIGINAL VALUE
- XOR *,1 TO DMOV VALUE
- BNZ OTHERR IF <> 0 THEN ERROR
- LACK >FF GET PUSH TEST VALUE
- SACL 0 KEEP IT FOR LATER
- PUSH PUSH IT TO THE STACK
- ZAC CLEAR THE ACC
- POP POP THE TEST VALUE AND COMPARE
- XOR 0 IT TO TEST VALUE
- BNZ OTHERR IF <> 0 THEN ERROR
- LACK RAMPT4 GET ADDRESS OF RAM PATTERN
- SACL 0 SET RAM PATTERN TO 0
- LACK RAMLP0 GET ADDRESS OF RAM CHECK PROGRAM
- CALA CHECK CALA INSTRUCTION
- B ENDTST FINISHED TEST
- OTHERR LACK >50 SET VALUE FOR ERROR CODE
- SACL 2 SHIFT THE ERROR VALUE 8
- LAC 2,8 BITS TO GET ERROR CODE >5000
- B ERROR AND EXIT TO ERROR ROUTINE
- PAGE
- * *
- * PROGRAM EXITS *
- * *
- ERROR EQU $
- SACL 0 SAVE ERROR CODE
- ENDTST CALL OUT BRANCH TO OFF-CHIP MEMORY
- INTRPT EQU 1538 ADDRESS OF INTRPT VECTOR
- OUT EQU 1536 ADDRESS OF OFF CHIP PROGRAM START
- END